/**
主要回顾：模板模式

模板模式的步骤：
    1. 先写出解决问题的一个方案
    2. 分析代码，把会发生变化的代码抽单独成一个抽象方法
    3. 使用 final 修饰模板方法，防止别人重写

*/

//一个测试代码运行时间的模板
abstract class TestRunTime{
    //用 final 修饰方法，防止被重写
    public final void getRunTime(){
        long startTime = System.currentTimeMillis();
        runCode();
        long endTime = System.currentTimeMillis();
        System.out.println("timed: " + (endTime - startTime) + " ms");
    }
    
    //会改变的代码抽象出来，让用户自己实现
    public abstract void runCode();
}

class LearnTemplate extends TestRunTime{
    public static void main(String[] args) {
        Demo1103 d = new Demo1103();
        d.getRunTime();
    }
    
    //实现需要测试的代码
    public void runCode(){
        int i = 0;
        while(i < 100){
            System.out.println("i = " + i);
            i++;
        }
    }
}